#ifndef MYMAPMODEL_H
#define MYMAPMODEL_H

#include <QAbstractListModel>
#include "myabstractmapcontainer.h"
#include "mymapcontainer.h"

/** Модель-адптер вокруг QMap. Ключ в первом столбце(строке), значения во втором столбце(строке).
	*
	* Позволяет связать наследников QAbstractItemView и
	* QMap. Получает указатель на объект QMap и использует
	* его для хранения данных.
	* Из-за того, что макрос Q_OBJECT конфликтует с шаблонами,
	* указатель на QMap необходимо помещать во внутренний адаптер.
	* MyAbstractMapContainer — не шаблонизированный абстрактный
	* адаптер, видимый в наследнике QAbstractItemModel. MyMapContainer —
	* шаблонизированный наследник MyAbstractMapContainer содержащий
	* указатель на QMap.
	* @author Василий Почкаенко.
	*/
class MyMapModelKeysToColumn : public QAbstractListModel{
Q_OBJECT
private:
	/** Обёртка вокруг QMap.*/
	MyAbstractMapContainer * mc;

	/** Расположить в столбик(или в строку).*/
	bool isV;

public:
	explicit MyMapModelKeysToColumn(MyAbstractMapContainer * MapContainer, //<- Указатель на обёртку вокруг QMap.
																	 bool isVertical = true, //<- Расположить в столбик(или в строку).
																	 QObject *parent = 0);

	Qt::ItemFlags flags(const QModelIndex &index) const;
	QVariant data(const QModelIndex &index, int role) const;
	QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
	int rowCount(const QModelIndex &parent = QModelIndex()) const;
	int columnCount ( const QModelIndex & parent = QModelIndex() ) const;
	bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
	bool setHeaderData ( int section, Qt::Orientation orientation, const QVariant & value, int role = Qt::EditRole );
	bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex());
	bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex());
	bool insertColumns ( int column, int count, const QModelIndex & parent = QModelIndex() );
	bool removeColumns ( int column, int count, const QModelIndex & parent = QModelIndex() );
	QModelIndex parent ( const QModelIndex & index ) const;

signals:

public slots:

};

#endif // MYMAPMODEL_H
